/***********************************************************************************
 * 文件名： mcu_flash.c
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		N32 的 Flash 低层操作，提供整页擦写API。支持线程安全。
 * 修改记录：
 * 	2023/4/22: 初版。 刘言。
***********************************************************************************/
#include "mcu_flash.h"
#include "mcu.h"

void Flash_WritePage(u32 addr, const u8 *buff)
{
    u32 i = 0;

    // addr = (addr / FLASH_PAGE_SIZE) * FLASH_PAGE_SIZE;

    while( (u32)buff % 4 !=0);

    Mcu_DisableInt();

    /* Unlocks the FLASH Program Erase Controller */
    FLASH_Unlock();

    /* Erase */
    if (FLASH_COMPL != FLASH_EraseOnePage(addr))
    {
        while(1);
    }

    /* Program */
    for (i = 0; i < FLASH_PAGE_SIZE; i += 4)
    {
        u32 dat32 = *((u32 *)(buff+i));
        if (FLASH_COMPL != FLASH_ProgramWord(addr + i, dat32))
        {
            while(1);
        }
    }

    /* Locks the FLASH Program Erase Controller */
    FLASH_Lock();

    Mcu_EnableInt();
}



